freeslot("MT_EGGCALBURN", "S_EGGCALBURN_HOVER", "S_EGGCALBURN_HOVER1", "S_EGGCALBURN_HOVER2", "S_EGGCALBURN_LAZER", "S_EGGCALBURN_LAZER1", "S_EGGCALBURN_BEAM", "S_EGGCALBURN_BEAM1", "S_EGGCALBURN_RETREAT", "S_EGGCALBURN_RETREAT1", "S_EGGCALBURN_HIT", "S_EGGCALBURN_KABOOM", "S_EGGCALBURN_KABOOM1", "S_EGGCALBURN_KABOOM2", "S_EGGCALBURN_KABOOM3", "S_EGGCALBURN_KABOOM4", "S_EGGCALBURN_KABOOM5", "S_EGGCALBURN_KABOOM6", "S_EGGCALBURN_KABOOM7", "S_EGGCALBURN_KABOOM8", "S_EGGCALBURN_KABOOM9", "S_EGGCALBURN_KABOOM10", "S_EGGCALBURN_KABOOM11", "S_EGGCALBURN_KABOOM12", "S_EGGCALBURN_KABOOM13", "S_EGGCALBURN_RUNAWAY", "S_EGGCALBURN_RUNAWAY1", "S_EGGCALBURN_BEAM_HAULT", "S_EGGCALBURN_LAZER_HAULT", "SPR_EGG1")

//Special Thanks to Monster Iestyn, Flare, Flame, and anyone else on #scripting who helped make this possible.

local function Spk_SpawnSpikeShield(mobj)
    local spknum
    local spk
    
    if mobj and mobj.valid
        for spknum = 0, 3 do
            spk = P_SpawnMobj(mobj.x, mobj.y, mobj.z, MT_SPIKEBALL)
            spk.target = mobj
            spk.threshold = spknum+1 -- Tell these spikeballs apart
			--print("Spawning Spikeball #"+spk.threshold)
        end
    end
end

addHook("MobjSpawn", function(mo)
    mo.jetfume1 = P_SpawnMobj(mo.x, mo.y, mo.z, MT_JETFUMEC1)
    mo.jetfume2 = P_SpawnMobj(mo.x, mo.y, mo.z, MT_JETFUMEC1)
    mo.jetfume3 = P_SpawnMobj(mo.x, mo.y, mo.z, MT_JETFUMEC1)
    mo.jetfume1.target = mo
    mo.jetfume2.target = mo
    mo.jetfume3.target = mo
	Spk_SpawnSpikeShield(mo)
end, MT_EGGCALBURN)

addHook("MobjThinker", function(mo)
    if mo.jetfume1 and mo.jetfume1.valid then
		P_TeleportMove(mo.jetfume1, mo.x - 54 * cos(mo.angle), mo.y - 54 * sin(mo.angle), mo.z + (12*FRACUNIT))
    end
    if mo.jetfume2 and mo.jetfume2.valid then
		P_TeleportMove(mo.jetfume2, mo.x - 54 * cos(mo.angle) - 22*cos(mo.angle-ANGLE_90), mo.y - 54 * sin(mo.angle) - 22*sin(mo.angle-ANGLE_90), mo.z + (40*FRACUNIT))
    end
    if mo.jetfume3 and mo.jetfume3.valid then
		P_TeleportMove(mo.jetfume3, mo.x - 54 * cos(mo.angle) - 22*cos(mo.angle+ANGLE_90), mo.y - 54 * sin(mo.angle) - 22*sin(mo.angle+ANGLE_90), mo.z + (40*FRACUNIT))
    end
end, MT_EGGCALBURN)

addHook("MobjThinker", function(mo)
    -- Hacking in A_RotateSpikeBall a bit differently...
    local ns = 12*mo.info.speed
    local fa = (mo.threshold-1)*ANGLE_90 + ((leveltime%9)*ANG10)

    if mo.target and mo.target.valid
		if (mo.info.speed != 0) -- No Speed? Don't spin.
			P_TeleportMove(mo,
						mo.target.x + FixedMul(cos(fa), ns),
						mo.target.y + FixedMul(sin(fa), ns),
						mo.target.z + mo.target.height/2)
		end
    end
end, MT_SPIKEBALL)